#include <iostream>


/*
    在CPP中，继承有有一种方式：公共继承public，保护继承 protected，私有继承private

        1、public 公共继承：继承到父类中的属性（函数），保留原有的访问权限
        2、protected 保护继承：继承到父类中的属性（函数），超过protected 权限部分，将降级为protected 权限
        3、private 私有继承：继承到父类中的属性（函数），访问权限都设置为private 权限

    在CPP中，默认使用的是私有继承

    继承权限是将当前类的所有属性设置为对应权限，而不是所有的成员，不包括父类的成员
 */

class BaseClass
{
private:
    int privateField{};
protected:
    int protectedField{};
public:
    int publicField{};
};

class SubClass : private BaseClass
{
public:
    void test()
    {
        using namespace std;
        cout << publicField << endl;
        cout << protectedField << endl; // protectedField 是protected 成员，所以子类可以访问到
//        cout << privateField << endl; // 'privateField' is a private member of 'BaseClass' 报错的 private 只能本身访问，其他任意地方都不能访问
    }
};

class SubSubClass : public SubClass
{
public:
    void test2()
    {
        using namespace std;
//        cout << publicField << endl;
//        cout << protectedField << endl; // protectedField 是protected 成员，所以子类可以访问到
//        cout << privateField << endl; // 'privateField' is a private member of 'BaseClass' 报错的 private 只能本身访问，其他任意地方都不能访问

    }
};

int main()
{
    using namespace std;
    BaseClass baseClass{};
    cout << baseClass.publicField << endl;


    SubClass subClass{};
//    cout << subClass.publicField << endl;

    subClass.test();

    return 0;
}